package com.projet.segmiMap.activities;


import android.content.Context;
import com.projet.segmiMap.R;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.Polygon;
import com.projet.segmiMap.model.Etage;
import com.projet.segmiMap.model.Lieu;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * User: Julien
 * Date: 11/12/13
 * Time: 21:10
 * Gère la création des différents étages du batiments à partir des fichiers KML
 */
public class FloorBuilder {
    Context cx;
    private final List<Etage> floors = new ArrayList<Etage>();
    private GoogleMap mMap;

    public FloorBuilder(GoogleMap mMap, Context cx) {
        this.mMap = mMap;
        this.cx = cx;
        construireCarte();
    }

    public List<Etage> getFloors() {
        return floors;
    }

    public GoogleMap getmMap() {
        return mMap;
    }

    /**
     * Construit le corps de la carte  et de chaque étage à afficher dans l'application
     *
     * @see MainActivity
     */
    private void construireCarte() {
        //TO DO: Essayer de faire passer l'ensemble paramètre du contructeur d'Etage via un fichier .properties par exemple. => Séparer Données et code métier

        final Etage rdc = new Etage(0, cx.getResources().openRawResource(R.raw.rdc), cx.getResources().openRawResource(R.raw.salles_rdc), cx.getResources().openRawResource(R.raw.markers_rdc));
        construireEtage(rdc);
        final Etage etage1 = new Etage(1, cx.getResources().openRawResource(R.raw.etage1), cx.getResources().openRawResource(R.raw.salles_etage1), cx.getResources().openRawResource(R.raw.markers_etage1));
        construireEtage(etage1);
        final Etage etage2 = new Etage(2, cx.getResources().openRawResource(R.raw.etage2), cx.getResources().openRawResource(R.raw.salles_etage2), cx.getResources().openRawResource(R.raw.markers_etage2));
        construireEtage(etage2);
        final Etage etage3 = new Etage(3, cx.getResources().openRawResource(R.raw.etage3), cx.getResources().openRawResource(R.raw.salles_etage3), cx.getResources().openRawResource(R.raw.markers_etage3));
        construireEtage(etage3);
        final Etage etage4 = new Etage(4, cx.getResources().openRawResource(R.raw.etage4), cx.getResources().openRawResource(R.raw.salles_etage4), cx.getResources().openRawResource(R.raw.markers_etage4));
        construireEtage(etage4);
        final Etage etage5 = new Etage(5, cx.getResources().openRawResource(R.raw.etage5), cx.getResources().openRawResource(R.raw.salles_etage5), cx.getResources().openRawResource(R.raw.markers_etage5));
        construireEtage(etage5);
        final Etage etage6 = new Etage(6, cx.getResources().openRawResource(R.raw.etage6), cx.getResources().openRawResource(R.raw.salles_etage6), cx.getResources().openRawResource(R.raw.markers_etage6));
        construireEtage(etage6);
        final Etage entresol = new Etage(7, cx.getResources().openRawResource(R.raw.entresol), cx.getResources().openRawResource(R.raw.salles_e), cx.getResources().openRawResource(R.raw.markers_e));
        construireEtage(entresol);
    }

    /**
     * Construit chaque étage passée en paramètre en ajoutant les différents Lieux de l'étage
     *
     * @param e l'Etage à construire avec l'ensemble de ces salles
     */
    private void construireEtage(Etage e) {
        Marker marker;
        Set<Polygon> elmt = new HashSet<Polygon>();
        final Set<Marker> marks = new HashSet<Marker>();
        floors.add(e);
        elmt.add(mMap.addPolygon(e.getCoordonnees()));
        for (Lieu l : e.getLieux()) {
            elmt.add(mMap.addPolygon(l.getCoordonnees()));
            marker = mMap.addMarker(l.getMarqueur());
            l.setMarker(marker);

            marks.add(marker);
        }
        e.setElements(elmt);
        e.setMarkers(marks);
    }

}
